Recent trends in the development of large-scale enterprise software systems include dealing with systems of increasing size and scope that are written in multiple languages using a variety of platforms and frameworks by design teams that are becoming more broadly dispersed around the world. These trends place pressures on software engineers charged with maintaining such large and complex systems. Impact analysis of proposed system changes requires that the organization of the software system be sufficiently understood. This can be difficult for software engineers having no prior knowledge of the system, or for legacy systems that have been around for decades and for which formal documentation is sparse, or worse, completely unavailable.
Conventional methods of formally modeling the relationships within a software system exhibit many shortcomings and are typically able to model a small number of intra-system dependencies and interactions. This is either because existing modeling languages are able to capture only a small number of possible relationships within a software system or are generally unable to model relationships among software artifacts written in different programming languages.